
package com.jf.cloud.order.mapper;

import com.jf.cloud.api.delivery.dto.DeliveryOrderItemDTO;
import com.jf.cloud.order.model.PurchaseOrderItem;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 采购商品
 *
 * @author zz
 * @date 2022-06-22 17:12:02
 */
public interface PurchaseOrderItemMapper {

    /**
     * 获取采购商品列表
     *
     * @return 采购商品列表
     */
    List<PurchaseOrderItem> list();

    /**
     * 根据采购商品id获取采购商品
     *
     * @param purchaseSpuId 采购商品id
     * @return 采购商品
     */
    PurchaseOrderItem getByPurchaseSpuId(@Param("purchaseSpuId") Long purchaseSpuId);

    /**
     * 保存采购商品
     *
     * @param purchaseOrderItem 采购商品
     */
    void save(@Param("purchaseOrderItem") PurchaseOrderItem purchaseOrderItem);

    /**
     * 更新采购商品
     *
     * @param purchaseOrderItem 采购商品
     */
    void update(@Param("purchaseOrderItem") PurchaseOrderItem purchaseOrderItem);

    /**
     * 批量更新采购商品
     *
     * @param purchaseOrderItems 采购商品
     */
    void updateBatchById(@Param("purchaseOrderItems") List<PurchaseOrderItem> purchaseOrderItems);

    /**
     * 根据采购商品id删除采购商品
     *
     * @param purchaseSpuId
     */
    void deleteById(@Param("purchaseSpuId") Long purchaseSpuId);

    /**
     * 批量保存采购商品
     *
     * @param purchaseOrderItemList 采购商品
     */
    void saveBatch(@Param("purchaseOrderItemList") List<PurchaseOrderItem> purchaseOrderItemList);

    /**
     * 根据订单号获取订单项的物流类型
     *
     * @param orderItemId 订单号
     * @return 物流类型
     */
    int getDevTypeByOrderItemId(@Param("orderItemId") Long orderItemId);

    /**
     * 更新订单项发货数量信息
     *
     * @param orderItem    发货订单项
     * @param deliveryType 发货方式
     */
    void updateByDelivery(@Param("orderItem") DeliveryOrderItemDTO orderItem, @Param("deliveryType") Integer deliveryType);

    /**
     * 计算未发货商品数量
     *
     * @param orderId
     * @return
     */
    int countUnDeliveryNumByOrderId(@Param("orderId") Long orderId);

    /**
     * 根据订单号获取订单项
     *
     * @param orderId 订单号
     * @return 订单id以及发货方式
     */
    List<Integer> getDevTypeByOrderId(@Param("orderId") Long orderId);

    /**
     * 更新指定采购订单的状态
     *
     * @param purchaseOrderIds
     * @param status
     */
    void updateStatusByPurchaseOrderId(@Param("purchaseOrderIds") List<Long> purchaseOrderIds, @Param("status") Integer status);
}
